home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 10 / FM Towns Free Software Collection 10.iso / tos_updt / fmcity / palcom / auto / script / mailcom.mx < prev    next >
Text File  |  1995-04-11  |  8KB  |  265 lines

  1. //--------------------------------------------------------------------------//
  2. //                        PALCOM V2.1 L10                        //
  3. //                     自動通信:メール送受信スクリプト                        //
  4. //                                                                            //
  5. //                                        CopyRight(C) 1994/10/20                //
  6. //                                FUJITSU PERSONAL COMPUTER SYSTEMS LIMITED    //
  7. //                                        written by C-cube Soft T.Nakamura    //
  8. //--------------------------------------------------------------------------//
  9. //  本スクリプトは、$$USER.DEFINED.9 を復帰値格納用に使用します。            //
  10. //    【出力】                                                                //
  11. //      $$USER.DEFINED.9 = #TRUE  : 正常に終了した                            //
  12. //                           #FALSE : 正常に終了出来なかった                    //
  13. //--------------------------------------------------------------------------//
  14. event    @OPEN.EXTERN {
  15.     $$USER.DEFINED.9 = #FALSE;
  16.     $readFlgSub      = #FALSE;
  17.     $AUTO.WAIT15     = AUTO.getWaitChar( 15 );
  18.     $AUTO.WAIT60     = AUTO.getWaitChar( 60 );
  19.  
  20.     AUTO.putStr2("MCHECK\r");
  21.     sys.stopIntRec();
  22.     comtable( $a, 300 ) {
  23.         ">\w\w"            { exit;                    }
  24.         ">\w\w"        { exit;                    }
  25.         "(未読分"        { $readFlgSub = #TRUE;    }
  26.         interval        { AUTO.haltCheck();        }
  27.         timeout            { $readFlgSub = #TRUE;    }
  28.     }
  29.     sys.startIntRec();
  30.  
  31.     $mailList = list.getNth( AUTO.getAutoData(), 2 );
  32.  
  33.     //---   送信文書無し&ダウンロード指定無しの場合 RETURN   ---//
  34.     $idxList = AUTO.getUpList( 1 );
  35.     if(( list.size( $idxList ) == 0 )&&
  36.        (( list.getNth( $mailList, 1 ) == #FALSE )||( $readFlgSub == #FALSE ))){
  37.         $$USER.DEFINED.9 = #TRUE;
  38.         return;
  39.     }
  40.  
  41.     //---   メールに入る   ---//
  42.     sys.stopIntRec();
  43.     loop {
  44.         AUTO.putStr("MAIL\r");
  45.         $errFlg  = 1;
  46.         comtable( $a, 300 ) {
  47.             "MAIL\n"    { $errFlg = 0; exit; }
  48.             interval    { AUTO.haltCheck();  }
  49.         }
  50.         if( $errFlg == 0 ) {
  51.             exit;
  52.         }
  53.         AUTO.putStr("\r");
  54.         AUTO.waitPrompt( #TRUE );
  55.         continue;
  56.     }
  57.     $moreFlg = 0;
  58.     $inFlg   = 0;
  59.     comtable( $a, 1200 ) {
  60.         "電子メール"        { $inFlg = 1;            }
  61.         "MAIL>\w\w"            { $inFlg = 1; exit;        }
  62.         ">\w\w"            { exit;                    }
  63.         $AUTO.WAIT60        { AUTO.putStr("\r");    }
  64.         interval            { AUTO.haltCheck();        }
  65.         timeout                { exit;                    }
  66.     }
  67.     sys.startIntRec();
  68.     if( $inFlg == 0 ) {
  69.         $errMsg =  ["電子メールサービスへ入ることが出来ませんでした。",
  70.                     "巡回を中止しました。"];
  71.         AUTO.error("電子メール巡回", $errMsg );
  72.         $$USER.DEFINED.9 = #FALSE;
  73.         return;
  74.     }
  75.     AUTO.sendCommand("SET MENU OFF");
  76.     AUTO.sendCommand("SET PAGE OFF");
  77.  
  78.     //------------------------//
  79.     //---   アップロード   ---//
  80.     //------------------------//
  81.     if( list.getNth( $mailList, 2 ) == #TRUE ) {
  82.         xfer.pauseText( AUTO.getLogFileId());
  83.  
  84.         foreach( $a, $idxList ) {
  85.             //---   テキストメールの送信   ---//
  86.             $$USER.DEFINED.9 = [$a, 0];
  87.             $path = str.join([$$DIR.STANDARD,
  88.                                   "AUTO\\SCRIPT\\SENDFILE.MX"], "" );
  89.             script.openExtern( $path, #FALSE, [] );
  90.             if( AUTO.getHaltFlg() != 0 ) {
  91.                 xfer.resumeText( AUTO.getLogFileId());
  92.                 return;
  93.             }
  94.             if( $$USER.DEFINED.9 == #TRUE ) {
  95.                 AUTO.setSendFlg( $a );
  96.             }
  97.         }
  98.         xfer.resumeText( AUTO.getLogFileId());
  99.     }
  100.  
  101.     //------------------------//
  102.     //---   ダウンロード   ---//
  103.     //------------------------//
  104.     $logId = AUTO.getLogFileId();
  105.     if(( list.getNth( $mailList, 1 ) == #TRUE )&&( $readFlgSub == #TRUE )) {
  106.         sys.stopIntRec();
  107.         AUTO.putStr2("READ\r");
  108.  
  109.         //---   受信数を調べる   ---//
  110.         $txtList      = [];
  111.         $binList      = [];
  112.         $txtTitleList = [];
  113.         $binTitleList = [];
  114.         comtable( $a, 900 ) {
  115.             interval        { AUTO.haltCheck();  }
  116.             $AUTO.WAIT60    { AUTO.putStr("\r"); }
  117.             ">\w\w"        { exit; }            // プロンプト
  118.             ">\w\w"            { exit; }
  119.             " %b%d  %b%16a%2d/%2d    " {        // TEXT   の未受信メール
  120.                 list.putLast( $txtList,str.replaceAll( str.left($a,3)," ",""));
  121.                 $str = str.replaceAll( com.getString(0,#TRUE,#TRUE),"\n","" );
  122.                 $strList = list.delLast( str.split( $str, " " ));
  123.                 $str = str.join( $strList, " " );
  124.                 list.putLast( $txtTitleList, $str );
  125.             }
  126.             " %b%d  %b%16a%2d/%2d  B " {        // BINARY の未受信メール
  127.                 list.putLast( $binList,str.replaceAll( str.left($a,3)," ",""));
  128.                 $str = str.replaceAll( com.getString(0,#TRUE,#TRUE),"\n","" );
  129.                 $strList = list.delLast( str.split( $str, " " ));
  130.                 $str = str.join( $strList, " " );
  131.                 list.putLast( $binTitleList, $str );
  132.             }
  133.             timeout {
  134.                 $errMsg =  ["通信異常(タイムアウト)",
  135.                             "受信を中断しました。"];
  136.                 AUTO.error( "メール送/受信", $errMsg );
  137.                 $$USER.DEFINED.9 = #FALSE;
  138.                 return;
  139.             }
  140.         }
  141.  
  142.         //---   テキストのメールを受信する   ---//
  143.         $num = list.size( $txtList );
  144.         $i   = 1;
  145.         if( $num != 0 ) {
  146.             $str = str.join( $txtList, "," );
  147.             AUTO.putStr2( str.join([$str, "\r"], "" ));
  148.             $ptr  = file.tell( $logId );
  149.             $ptr2 = $ptr;
  150.             $mode = 0;
  151.             comtable( $a, 0 ) {
  152.                 interval        { AUTO.haltCheck();  }
  153.                 $AUTO.WAIT60    { AUTO.putStr("\r"); }
  154.                 "\n"            {                    // 行のカウント用
  155.                     if( $mode == 0 ) {
  156.                         $ptr  = file.tell( $logId );
  157.                         $ptr2 = $ptr;
  158.                     } else {
  159.                         $ptr2 = file.tell( $logId );
  160.                     }
  161.                 }
  162.                 "%b%d %b%18a%3c%5d          %2d/%2d/%2d %b%d:%2d"    {
  163.                     if( file.tell( $logId ) == $ptr2 + 54 ) {
  164.                         if( $mode == 0 ) {            // 見出しにマッチ
  165.                             $mode = 1;
  166.                             $id = str.mid( $a, 22, 8 );
  167.                         }
  168.                     }
  169.                 }
  170.                 "action:\w\w"         {                // 作業プロンプト
  171.                     $mode = 0;
  172.                     AUTO.putStr2("SAVE\r");
  173.                     $title   = list.getNth( $txtTitleList, $i );
  174.                     AUTO.writeIdx([
  175.                         [0x501,[1,[1,1,-1,-1,-1,-1,-1,-1,-1,-1]]],
  176.                         [0x104,[list.getNth( $txtTitleList, $i )]],
  177.                         [0x111,[$id]],
  178.                         [0x303,[0x01,0x00,$ptr,$ptr2-$ptr,0,0,0]]] );
  179.                     if( $num == $i ) {
  180.                         exit;
  181.                     }
  182.                     $i = $i + 1;
  183.                 }
  184.             }
  185.             AUTO.waitPrompt( #TRUE );
  186.             sys.startIntRec();
  187.         }
  188.  
  189.         //---   バイナリメールの受信   ---//
  190.         if(( list.size( $binList ) > 0 )&&( list.size( $txtList ) == 0 )) {
  191.             AUTO.sendCommand("M");
  192.         }
  193.         $i     = 1;
  194.         $fName = AUTO.getLogFileName();
  195. //$binList = [];
  196.         foreach( $a, $binList ) {
  197.             $cmd  = str.join(["DOWN", $a, "PROT:BPL\r"], " " );
  198.             AUTO.putStr2( $cmd );
  199.             comtable( $b, 0 ) {
  200.                 interval        { AUTO.haltCheck();    }
  201.                 ":\w\w"        {
  202.                     AUTO.putStr2( str.join([$fName, "\r"], "" ));
  203.                 }
  204.                 "開始-\n" {
  205.                     exit;
  206.                 }
  207.             }
  208.             $IdxId = AUTO.getIdxFileId();
  209.             $idxHeader = lsi.getInfo( $IdxId );
  210.             list.del1st( $idxHeader );
  211.             list.put1st( $idxHeader, AUTO.getIdxNum());
  212.             lsi.setInfo( $IdxId, $idxHeader );
  213.             $ptr = file.tell( $logId );
  214.             xfer.endText( $logId );
  215.             file.close( $logId );
  216.             event.mask( @ERROR );
  217.             $ret = xfer.recBinary( $fName, "", #TRUE, [] );
  218.             event.unmask( @ERROR );
  219.             $logId = file.open( $fName, "", 1 );
  220.             file.seek( $logId, 0, 2 );
  221.             xfer.recText( $logId, [] );
  222.             AUTO.setLogFileId( $logId );
  223.             if( data.getType( $ret ) != #NUMBER ) {
  224.                 $errMsg =  ["通信異常",
  225.                             "受信を中断しました。"];
  226.                 AUTO.error( "メール送/受信", $errMsg );
  227.                 $$USER.DEFINED.9 = #FALSE;
  228.                 return;
  229.             } else {
  230.                 AUTO.writeIdx([
  231.                         [0x501,[1,[1,1,-1,-1,-1,-1,-1,-1,-1,-1]]],
  232.                         [0x104,[list.getNth( $binTitleList, $i )]],
  233.                         [0x303,[0x01,0x8000,$ptr,$ret,0,0,0]]] );
  234.             }
  235.             comtable( $b, 0 ) {
  236.                 interval        { AUTO.haltCheck();  }
  237.                 $AUTO.WAIT60    { AUTO.putStr("\r"); }
  238.                 "action:\w\w"    {                // 作業プロンプト
  239.                     $mode = 0;
  240.                     AUTO.sendCommand("SAVE");
  241.                     exit;
  242.                 }
  243.                 "削除 (1:削除する 2:しない)\n:\w\w"    {
  244.                     $mode = 0;
  245.                     AUTO.sendCommand("2");
  246.                     exit;
  247.                 }
  248.             }
  249.             $i = $i + 1;
  250.         }
  251.     }
  252.     sys.startIntRec();
  253.     $$USER.DEFINED.9 = #TRUE;
  254.     return;
  255. }
  256. event    @CLOSE.EXTERN {
  257.     sys.startIntRec();
  258.     return;
  259. }
  260. event    @ERROR {
  261.     sys.startIntRec();
  262.     AUTO.fatalError();
  263.     event.mainLoop();
  264. }
  265.